#include "Rueda.h"


Rueda::Rueda(unsigned int cantRayos, unsigned int radio, unsigned int cantSoldaduras, unsigned int separacionDiscos)
	{
	this->cantidadSoldaduras = cantSoldaduras;
	this->separacionDiscos = separacionDiscos;
	this->velAngular = 1;
	this->cilindro = new Cilindro(20);
	this->disco = new Disco(cantRayos, radio);
	}

Rueda::~Rueda()
	{
	delete this->cilindro;
	delete this->disco;
	}

int Rueda::getVelAngular() const
	{
	return this->velAngular;
	}

void Rueda::setVelAngular(int velAngular)
	{
	this->velAngular = velAngular;
	}

GLfloat Rueda::getRadioRueda() const
	{
	return this->disco->getRadioDisco();
	}

void Rueda::dibujar(int tiempoDurEscena)
	{
	glPushMatrix();

	/*	nAngle: indica el angulo de giro que se va produciendo para soldar ambos discos a la rueda.	*/
	GLfloat nAngle = 360.0 / this->cantidadSoldaduras;
	GLfloat angle = 0;
	GLfloat radio = this->disco->getRadioDisco();
	
	/*	Dibujo soldaduras de la rueda.	*/
	while (angle < 360){
		glPushMatrix();
		/*	Roto el cilindro que suelda discos alrededor del eje z.	*/
		glRotatef(angle, 0.0, 0.0, 1.0);
		/*	Escalo el cilindro para que suelde las uniones de los 2 discos.	*/
		glScalef(1.0, 1.0, this->separacionDiscos);
		/*	Traslado al cilindro que se encarga de soldar los 2 discos a la posicion del radio del disco.	*/
		glTranslatef(radio, 0.0, 0.0);
		/*	Escalo el cilindro para que quede afinado en (x,y).	*/
		glScalef(0.10, 0.10, 1.0);
		/*	Dibujo el cilindro.	*/
		this->cilindro->dibujar(tiempoDurEscena);
		glPopMatrix();
		angle += nAngle;
	}

	glPushMatrix();
	/*	Dibujo el disco superior que compone la rueda.	*/
	this->disco->dibujar(tiempoDurEscena);
	// Traslado al disco superior la distancia en z indicada por separacionDiscos.
	glTranslatef(0.0, 0.0, this->separacionDiscos);
	/*	Dibujo el disco inferior que compone la rueda.	*/
	this->disco->dibujar(tiempoDurEscena);
	glPopMatrix();

	glPopMatrix();
	}